/* La clase TorrentGui contiene toda la informacion sobre un torrent
 * que ve el usuario. Es decir, todos los datos que se muestran en pantalla
 * de un torrent (tamaño, nombre, peers, etc..), se almacenan en esta clase.
 */
#ifndef PROPIEDADESGUI_H_
#define PROPIEDADESGUI_H_

#include "VentanaPropiedades.h"
#include "ColumnasTorrentGui.h"
#include "PeerGui.h"

#include <gtkmm.h>
#include <string>
#include <iostream>
#include <map>
#include <stdio.h>

using namespace Gtk;
using namespace std;

class Gui;

class TorrentGui {

private:

	Gui* gui;

	VentanaPropiedades* vistaPropiedades;

	TreeModel::Row torrent;
	ColumnasTorrentGui columnasTorrent;

	Glib::RefPtr<ListStore> modeloPeers;
	map <string, PeerGui*> peers;
	ColumnasPeersGui columnasPeer;

	int cantMaxPeers;
	void ventanaCerrada();

public:
	TorrentGui(const TreeModel::Row& torrent, Gui* gui);
	void mostrarVentana();

	string getNombre();
	void setNombre(const string& nombre);

	string getId();

	double getTamanio();
	void setTamanio(double tamanio);

	void setBajado(double bajado);
	int getBajado();

	void setSubido(double subido);
	double getSubido();

	void setError(const string& error);
	void setEstado(const string& estado);

	void setVelocidad(double velocidad);

	int getCantPeers();
	void setCantPeers(int peers);

	void setMaxPeersConectados(int maxPeersConectados);

	void setAnuncio(const string& anuncio);
	void setUltimoAnuncio(const string& ultimo);
	void setProximoAnuncio(const string& proximo);

	PeerGui* getPeer(const string& id);
	PeerGui* addPeer(const string& id);
	void removePeer(const string& id);

	virtual ~TorrentGui();
};

#endif /* PROPIEDADESGUI_H_ */
